#ifndef GY_GRAPHICSCORNERSTYLERECTITEM_H
#define GY_GRAPHICSCORNERSTYLERECTITEM_H

#include "Graphics/BasicGraphics/GY_BasicsGraphicsObject.h"

class GY_CONTROLLIBRARY_EXPORT GY_GraphicsCornerStyleRectItem : public GY_BasicsGraphicsObject
{
    Q_OBJECT

public:
    explicit Q_INVOKABLE GY_GraphicsCornerStyleRectItem(const QString &guid,QGraphicsItem *parent = nullptr);
    ~GY_GraphicsCornerStyleRectItem(){}

private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief updatePath 更新路径
     */
    void updatePath();
    /**
     * @brief updateCirlePoint  更新中心点
     * @param name 属性名称
     * @param value 中心点位置
     * @return 是否更新成功
     */
    bool updateCirlePoint(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint 更新点位
     * @param name 属性名称
     * @param value 坐标点
     * @return 是否更新成功
     */
    bool updatePoint(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint 更新相对中心点位
     * @param name 属性名称
     * @param value 坐标点
     * @return 是否更新成功
     */
    bool updateSize(const QString &name, const QVariant &value);
    /**
     * @brief updateCornerRadius 更新角型半径大小
     * @param name 属性名称
     * @param value 属性值
     * @return 是否更新成功
     */
    bool updateCornerRadius(const QString &name,const QVariant &value);
    /**
     * @brief updateCornerStyle 更新角型类型
     * @param name 属性名称
     * @param value 属性值
     * @return 是否更新成功
     */
    bool updateCornerStyle(const QString &name,const QVariant &value);
    /**
     * @brief updateQuadrantPath 传入更新路径
     * @param path 路径
     * @param bottomLeftStyle 左下角类型
     * @param topLeftStyle 左上角类型
     * @param topRightStyle 右上角类型
     * @param bottomRightStyle 右下角类型
     * @param leftPoint 左下角点数据
     */
    void updateQuadrantPath(QPainterPath &path, const QString &bottomLeftStyle, const QString &topLeftStyle, const QString &topRightStyle, const QString &bottomRightStyle, const QPointF leftPoint);
    /**
     * @brief cornerStyle 设置边角路径
     * @param path 路径
     * @param startPoint 路径开始的
     * @param endPoint 路径结束点
     * @param outPoint 外点
     * @param intPoint 内点
     * @param radius 半径
     * @param style 边角类型
     */
    void cornerStyle(QPainterPath &path, const QPointF &startPoint, const QPointF &endPoint, const QPointF &outPoint, const QPointF &intPoint, const qreal radius, const QString &style, const qreal intStart, const qreal intEnd, const qreal outStart, const qreal outEnd);
    /**
     * @brief precalculatedAngle 计算相对中心点的角度
     * @param centerPoint 中心点
     * @param calculatePoint 计算点
     * @return 角度
     */
    qreal precalculatedAngle(const QPointF &centerPoint, const QPointF &calculatePoint);

};

#endif // GY_GRAPHICSCORNERSTYLERECTITEM_H
